
package edu.upn.sigemfi.plt.beans;

import edu.upn.sigemfi.plt.bc.DetalleSeguroDelegate;
import edu.upn.sigemfi.plt.bc.MicroseguroDelegate;
import edu.upn.sigemfi.plt.be.DetalleSeguro;
import edu.upn.sigemfi.plt.be.DetalleSeguroPK;
import edu.upn.sigemfi.plt.be.EstadoMicroseguro;
import edu.upn.sigemfi.plt.be.Microseguro;
import edu.upn.sigemfi.seg.be.Persona;
import edu.upn.sigemfi.seg.be.PersonaNatural;
import edu.upn.sigemfi.seg.beans.AbstractController;
import java.util.ArrayList;
import java.util.List;

public class AsociacionSeguroClienteController extends AbstractController{

    private Microseguro microseguro;
    private Persona personaTemp;
    private PersonaNatural personaNaturalTemp;
    private DetalleSeguro detalleSeguro;
    private DetalleSeguroPK detalleSeguroPK;
    private DetalleSeguroDelegate detalleSeguroDelegado;
    private MicroseguroDelegate microseguroDelegado;
    public  List<PersonaNatural> personasNaturalesAgregar;
    private boolean bolAgregarPersonaNatural;
    private boolean bolAgregarCliente;
    private boolean esClienteNatural;


    public AsociacionSeguroClienteController() {

        detalleSeguroDelegado = new DetalleSeguroDelegate();
        microseguroDelegado = new MicroseguroDelegate();
        detalleSeguro = new DetalleSeguro();
        microseguro = new Microseguro();
        detalleSeguroPK = new DetalleSeguroPK();
        bolAgregarPersonaNatural = false;
        bolAgregarCliente = false;
        personasNaturalesAgregar = new ArrayList<PersonaNatural>();
        personaNaturalTemp = new PersonaNatural();

    }

    public String CancelarRetiroCliente() {
        return "clienteRetirado";
    }

    public String ClienteARetirar() {
        return "clienteARetirar";
    }

    public String Cancelar() {
        reiniciarEstados();
        return "cancelarmicroseguro";
    }

    public String reiniciarEstados(){
        bolAgregarPersonaNatural = true;
        bolAgregarCliente = true;
        personasNaturalesAgregar = new ArrayList<PersonaNatural>();
        personaNaturalTemp = new PersonaNatural();
        microseguro = new Microseguro();
        return "";
    }

    public String ClienteNaturalRetirado(){
        if(personasNaturalesAgregar.size() == 0){
            info("No se encontro Clientes Naturales previos");
        }else{
            personasNaturalesAgregar.remove(personaNaturalTemp);
        }
        return "clienteretirado";
    }

    public String AsociarClienteNatural(){

        for(PersonaNatural pn : personasNaturalesAgregar){
            if(pn.getIdPersona() == personaNaturalTemp.getIdPersona()){
                error("No puedes agregar a la misma personas");
                return "clienteasociadomicroseg";
            }
        }
        personasNaturalesAgregar.add(personaNaturalTemp);
        return "clienteasociadomicroseg";
    }

    public String AsociarCliente(){
        personaNaturalTemp = new PersonaNatural();
        bolAgregarPersonaNatural = true;
        return "asociarACliente";
    }

    public String AceptarAsociacionNatural(){
        try {
            for(PersonaNatural pn : personasNaturalesAgregar){
                detalleSeguroPK.setFidSegPersona(pn.getIdPersona());
                detalleSeguroPK.setFidPltMicroseguro(microseguro.getIdMicroseguro());
                detalleSeguro.setDetalleSeguroPK(detalleSeguroPK);

                detalleSeguroDelegado.crear(detalleSeguro);
            }
            microseguro.setEstado(EstadoMicroseguro.Creado);
            personasNaturalesAgregar = new ArrayList<PersonaNatural>();
            info("La Asociacion se realizó correctamente");
        } catch (Exception e) {
            error("No se pudo asociar");
        }
        return "microseguroAsociado";
    }

    public boolean isBolAgregarCliente() {
        return bolAgregarCliente;
    }

    public void setBolAgregarCliente(boolean bolAgregarCliente) {
        this.bolAgregarCliente = bolAgregarCliente;
    }

    public boolean isBolAgregarPersonaNatural() {
        return bolAgregarPersonaNatural;
    }

    public void setBolAgregarPersonaNatural(boolean bolAgregarPersonaNatural) {
        this.bolAgregarPersonaNatural = bolAgregarPersonaNatural;
    }

    public DetalleSeguro getDetalleSeguro() {
        return detalleSeguro;
    }

    public void setDetalleSeguro(DetalleSeguro detalleSeguro) {
        this.detalleSeguro = detalleSeguro;
    }

    public DetalleSeguroPK getDetalleSeguroPK() {
        return detalleSeguroPK;
    }

    public void setDetalleSeguroPK(DetalleSeguroPK detalleSeguroPK) {
        this.detalleSeguroPK = detalleSeguroPK;
    }

    public boolean isEsClienteNatural() {
        return esClienteNatural;
    }

    public void setEsClienteNatural(boolean esClienteNatural) {
        this.esClienteNatural = esClienteNatural;
    }

    public Microseguro getMicroseguro() {
        return microseguro;
    }

    public void setMicroseguro(Microseguro microseguro) {
        this.microseguro = microseguro;
    }

    public PersonaNatural getPersonaNaturalTemp() {
        return personaNaturalTemp;
    }

    public void setPersonaNaturalTemp(PersonaNatural personaNaturalTemp) {
        this.personaNaturalTemp = personaNaturalTemp;
    }

    public Persona getPersonaTemp() {
        return personaTemp;
    }

    public void setPersonaTemp(Persona personaTemp) {
        this.personaTemp = personaTemp;
    }

    public List<PersonaNatural> getPersonasNaturalesAgregar() {
        return personasNaturalesAgregar;
    }

    public void setPersonasNaturalesAgregar(List<PersonaNatural> personasNaturalesAgregar) {
        this.personasNaturalesAgregar = personasNaturalesAgregar;
    }

    public DetalleSeguroDelegate getDetalleSeguroDelegado() {
        return detalleSeguroDelegado;
    }

    public void setDetalleSeguroDelegado(DetalleSeguroDelegate detalleSeguroDelegado) {
        this.detalleSeguroDelegado = detalleSeguroDelegado;
    }

    public MicroseguroDelegate getMicroseguroDelegado() {
        return microseguroDelegado;
    }

    public void setMicroseguroDelegado(MicroseguroDelegate microseguroDelegado) {
        this.microseguroDelegado = microseguroDelegado;
    }
}
